package org.raymond.iworks.study.basic.designpattern.principle.interfacesegregation;

public class InterfaceSegregation1 {
    public static void main(String[] args) {
        A a = new A();
        B b = new B();
        C c = new C();
        D d = new D();

        a.depend1(b);
        a.depend2(b);
        a.depend3(b);
        c.depend1(d);
        c.depend4(d);
        c.depend5(d);
    }
}

interface Interface1{
    void operation1();
    void operation2();
    void operation3();
    void operation4();
    void operation5();
}
class A {
    void depend1(Interface1 i){
        i.operation1();
    }
    void depend2(Interface1 i){
        i.operation2();
    }
    void depend3(Interface1 i){
        i.operation3();
    }
}
class B implements Interface1 {
    @Override
    public void operation1() {
        System.out.println("B实现了operation1");
    }
    @Override
    public void operation2() {
        System.out.println("B实现了operation2");
    }
    @Override
    public void operation3() {
        System.out.println("B实现了operation3");
    }
    @Override
    public void operation4() {
        System.out.println("B实现了operation4");
    }
    @Override
    public void operation5() {
        System.out.println("B实现了operation5");
    }
}
class C {
    void depend1(Interface1 i){
        i.operation1();
    }
    void depend4(Interface1 i){
        i.operation4();
    }
    void depend5(Interface1 i){
        i.operation5();
    }
}
class D implements Interface1 {
    @Override
    public void operation1() {
        System.out.println("D实现了operation1");
    }
    @Override
    public void operation2() {
        System.out.println("D实现了operation2");
    }
    @Override
    public void operation3() {
        System.out.println("D实现了operation3");
    }
    @Override
    public void operation4() {
        System.out.println("D实现了operation4");
    }
    @Override
    public void operation5() {
        System.out.println("D实现了operation5");
    }
}